#ifndef _NE_TEXTURE_MANAGER_H_
#define _NE_TEXTURE_MANAGER_H_

#include <common/Singleton.h>
#include <system/ResourceManager.h>
#include <graphics/Texture.h>

namespace ne
{
    class NEAPI TextureManager : public ResourceManager, public Singleton<TextureManager>
    {
        public:
            TextureManager();

            TexturePtr createTexture(const std::string &name,
                                     const std::string &fileName,
                                     const TextureType type,
                                     const TextureFormat format,
                                     const PixelType pt,
                                     const uint32_t width,
                                     const uint32_t height,
                                     const uint32_t depth=1);

            TexturePtr createTextureFromFile(const std::string &name,
                                             const std::string &fileName,
                                             const TextureFormat format=TF_RGBA);

            virtual ~TextureManager();

        public:
            static TextureManager& GetSingleton();

            static TextureManager* GetSingletonPtr();

        protected:
            Resource* createImplement(const uint64_t id,
                                      const std::string &name,
                                      const std::string &fileName,
                                      const bool isManual,
                                      ManualResourceLoader *pLoader);
    };
}

#endif

